package cc.wsyw126.java.nowcoder.interview;

import cc.wsyw126.java.lintCode.convert_binary_search_tree_to_doubly_linked_list.TreeNode;

/**
 * Created by Administrator on 2017/4/26.
 * 实现一个函数，检查二叉树是否平衡，平衡的定义如下，对于树中的任意一个结点，其两颗子树的高度差不超过1。
 * 给定指向树根结点的指针TreeNode* root，请返回一个bool，代表这棵树是否平衡。
 */
public class Balance {
    private boolean result = true;

    public boolean isBalance(TreeNode root) {
        if (root == null) return true;
        doTask(root);
        return result;
    }

    private int doTask(TreeNode root) {
        if (root == null) return 0;
        int left = 0, right = 0;
        if (root.left != null) {
            left = doTask(root.left);
        }
        if (!result) return 0;
        if (root.right != null){
            right = doTask(root.right);
        }
        if (!result) return 0;
        if (Math.abs(left - right) <= 1) {
            return left>right?left+1:right+1;
        } else {
            result = false;
        }
        return 0;
    }
}
